跳到主要内容

HAVING where on


FROM -> ON->(LEFT/RIGHT JOIN)->WHERE -> GROUP BY -> SELECT 的字段 -> HAVING -> DISTINCT -> ORDER BY -> LIMIT


SELECT ....,...,...,(存在聚合函数)
FROM ...(LEFT/RIGHT) JOIN...ON ...多表连接条件
WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件
GROUP BY ...,...
HAVING 包含聚合函数的过滤条件
ORDER BY ... (ASC/DESC)
LIMIT ...,..

SELECT ....,...,...,(存在聚合函数)
FROM ...,...,
WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件
GROUP BY ...,...
HAVING 包含聚合函数的过滤条件
ORDER BY ... (ASC/DESC)
LIMIT ...,..



MHERE子句在GROUP BY分组和聚合函数之前对数据行进行过滤;
HAVING子句在GROUP BY分组和聚合函数之后对数据行进行过滤。


SELECT dept_id, count(*)
FROM employee e
GROUP BY dept_id
HAVING count(*)>5


SELECT dept_id, count(*)
FROM employee e
WHERE salary > 10000
GROUP BY dept_id
HAVING count(*)>5



对于內连接查询,WHERE子句和ON子句等效:
对于外连接查询,ON子句在连接操作之前执行,
WHERE子句(逻辑上)在连接操作之后执行。

SELECT *
FROM department d, employee e
WHERE d.dept_id = e.dept_id
AND d.dept_name ='财务部';


SELECT *
FROM department d
JOIN employee e ON (d.dept_id=e.dept_id AND d.dept_name ='财务部');


SELECT *
FROM department d
JOIN employee e ON (d.dept_id=e.dept_id)
WHERE d.dept_name ='财务部';